package com.group4.datafactorybackend.controller;

import com.group4.datafactorybackend.common.R;
import com.group4.datafactorybackend.entity.DTO.*;
import com.group4.datafactorybackend.service.ApiService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * @author 邹代鑫
 * @date 2022/7/29
 * @description 接口管理控制层
 */
@Api(tags = "接口管理")
@RestController
@RequestMapping("/interface")
public class ApiManagementController {

    @Autowired
    private ApiService apiService;

    /**
     * @author 李泓静
     * @param apiCode 接口编号
     * @return R
     * @description 查看接口详情
     */
    @ApiOperation("查看接口详情")
    @GetMapping("/get/getApiDetail/{apiCode}")
    public R<?> getApiDetail(@PathVariable("apiCode") String apiCode) {
        return apiService.getApiDetail(apiCode);
    }

    /**
     * @author 邹代鑫
     * @param createOrUpdateApiDTO 新增、修改接口接收参数实体类
     * @return R
     * @description 新增/编辑接口
     */
    @ApiOperation("新增接口")
    @PostMapping("/post/createOrUpdateApi")
    public R<?> createOrUpdateApi(@RequestBody @Validated CreateOrUpdateApiDTO createOrUpdateApiDTO){
        return apiService.createOrUpdateApi(createOrUpdateApiDTO);
    }

    /**
     * @author 卑微小峰
     * @param batchReleaseOrOutageDTO （批量）发布/停用接收参数实体类
     * @return R
     * @description (批量)发布/停用接口
     */
    @ApiOperation("(批量)发布/停用接口")
    @PutMapping("/update/releaseOrOutage")
    public R<?> releaseOrOutage(@RequestBody BatchReleaseOrOutageDTO batchReleaseOrOutageDTO) {
        return apiService.releaseOrOutage(batchReleaseOrOutageDTO);
    }

    /**
     * @author 卑微小峰
     * @param batchClassifyDTO 批量分类接收参数实体类
     * @return R
     * @description 接口批量分类
     */
    @ApiOperation("批量分类")
    @PostMapping("/post/batchClassify")
    public R<?> batchClassify(@RequestBody @Validated BatchClassifyDTO batchClassifyDTO) {
        return apiService.batchClassify(batchClassifyDTO);
    }

    /**
     * @author 章珑赢
     * @param parameterDTO 查询接口列表参数条件实体类
     * @return R
     * @description 查询接口列表
     */
    @ApiOperation("查询接口列表")
    @PostMapping("/post/ApiList")
    public R<?> selectApiListBy(@RequestBody ApiParameterDTO parameterDTO) {
        return apiService.selectApiListBy(parameterDTO);
    }

    /**
     * @author 邹代鑫
     * @param apiTestDTO 接收测试数据实体类
     * @return R
     * @description 测试接口
     */
    @ApiOperation("测试接口")
    @PostMapping("/post/apiTest")
    public R<?> apiTest(@RequestBody @Validated ApiTestDTO apiTestDTO) {
        return this.apiService.apiTest(apiTestDTO);
    }

    /**
     * @author 卑微小峰
     * @param apiCode 接口编号
     * @return R
     * @description 删除未发布接口
     */
    @ApiOperation("删除未发布接口")
    @DeleteMapping("/delete/deleteApi/{apiCode}")
    public R<?> deleteApi(@PathVariable("apiCode") String apiCode) {
        return apiService.deleteApi(apiCode);
    }

    /**
     * @author 卑微小峰
     * @param createOrUpdateApiDTO 需要校验的数据
     * @return R
     * @description 新增/编辑接口数据校验接口
     */
    @ApiOperation("数据校验接口")
    @PostMapping("/post/verifyApiData")
    private R<?> verifyApiData(@RequestBody @Validated CreateOrUpdateApiDTO createOrUpdateApiDTO) {
        return apiService.verifyApiData(createOrUpdateApiDTO);
    }
}
